﻿#include "Language.h"
#include "Functions/IniReader.h"

std::string GameLanguage::PetMode_Both = "[Pet: Attack and Move]";
std::string GameLanguage::PetMode_MoveOnly = "[Pet: Do Not Attack]";
std::string GameLanguage::PetMode_AttackOnly = "[Pet: Do Not Move]";
std::string GameLanguage::PetMode_None = "[Pet: Do Not Attack or Move]";
std::string GameLanguage::AttackMode_Peace = "[Mode: Peaceful]";
std::string GameLanguage::AttackMode_Group = "[Mode: Group]";
std::string GameLanguage::AttackMode_Guild = "[Mode: Guild]";
std::string GameLanguage::AttackMode_EnemyGuild = "[Mode: Enemy Guild]";
std::string GameLanguage::AttackMode_RedBrown = "[Mode: Red/Brown]";
std::string GameLanguage::AttackMode_All = "[Mode: Attack All]";
std::string GameLanguage::LogOutTip = "Do you want to log out of Legend of Mir?";
std::string GameLanguage::ExitTip = "Do you want to quit Legend of Mir?";
std::string GameLanguage::DiedTip = "You have died, Do you want to revive in town?";
std::string GameLanguage::DropTip = "Are you sure you want to drop {0}?";
std::string GameLanguage::Inventory = "Inventory ({0})";
std::string GameLanguage::Character = "Character ({0})";
std::string GameLanguage::Skills = "Skills ({0})";
std::string GameLanguage::Quests = "Quests ({0})";
std::string GameLanguage::Options = "Options ({0})";
std::string GameLanguage::Menu = "Menu";
std::string GameLanguage::GameShop = "Game Shop ({0})";
std::string GameLanguage::BigMap = "BigMap ({0})";
std::string GameLanguage::DuraPanel = "Dura Panel";
std::string GameLanguage::Mail = "Mail";
std::string GameLanguage::Exit = "Exit ({0})";
std::string GameLanguage::LogOut = "Log Out ({0})";
std::string GameLanguage::Help = "Help ({0})";
std::string GameLanguage::Keybinds = "Keybinds";
std::string GameLanguage::Ranking = "Ranking ({0})";
std::string GameLanguage::Creatures = "Creatures ({0})";
std::string GameLanguage::Mount = "Mount ({0})";
std::string GameLanguage::Fishing = "Fishing ({0})";
std::string GameLanguage::Friends = "Friends ({0})";
std::string GameLanguage::Mentor = "Mentor ({0})";
std::string GameLanguage::Relationship = "Relationship ({0})";
std::string GameLanguage::Groups = "Groups ({0})";
std::string GameLanguage::Guild = "Guild ({0})";
std::string GameLanguage::Expire = "Expire: {0}";
std::string GameLanguage::ExpireNever = "Expire: Never";
std::string GameLanguage::Never = "Never";
std::string GameLanguage::Trade = "Trade ({0})";
std::string GameLanguage::Size = "Size";
std::string GameLanguage::ChatSettings = "Chat Settings";
std::string GameLanguage::Rotate = "Rotate";
std::string GameLanguage::Close = "Close ({0})";
std::string GameLanguage::GameMaster = "GameMaster";
std::string GameLanguage::PatchErr = "Could not get Patch Information";
std::string GameLanguage::LastOnline = "Last Online";
std::string GameLanguage::Gold = "Gold";
std::string GameLanguage::Credit = "Credit";
std::string GameLanguage::YouGained = "You gained {0}.";
std::string GameLanguage::YouGained2 = "You gained {0:###,###,###} {1}";
std::string GameLanguage::ExperienceGained = "Experience Gained {0}";
std::string GameLanguage::ItemDescription = "Item Description";
std::string GameLanguage::RequiredLevel = "Required Level : {0}";
std::string GameLanguage::RequiredDC = "Required DC : {0}";
std::string GameLanguage::RequiredMC = "Required MC : {0}";
std::string GameLanguage::RequiredSC = "Required SC : {0}";
std::string GameLanguage::ClassRequired = "Class Required : {0}";
std::string GameLanguage::Holy = "Holy: + {0} (+{1})";
std::string GameLanguage::Holy2 = "Holy: + {0}";
std::string GameLanguage::Accuracy = "Accuracy: + {0} (+{1})";
std::string GameLanguage::Accuracy2 = "Accuracy: + {0}";
std::string GameLanguage::Agility = "Agility: + {0} (+{1})";
std::string GameLanguage::Agility2 = "Agility: + {0}";
std::string GameLanguage::DC = "DC + {0}~{1} (+{2})";
std::string GameLanguage::DC2 = "DC + {0}~{1}";
std::string GameLanguage::MC = "MC + {0}~{1} (+{2})";
std::string GameLanguage::MC2 = "MC + {0}~{1}";
std::string GameLanguage::SC = "SC + {0}~{1} (+{2})";
std::string GameLanguage::SC2 = "SC + {0}~{1}";
std::string GameLanguage::Durability = "Durability";
std::string GameLanguage::Weight = "W:";
std::string GameLanguage::AC = "AC + {0}~{1} (+{2})";
std::string GameLanguage::AC2 = "AC + {0}~{1}";
std::string GameLanguage::MAC = "MAC + {0}~{1} (+{2})";
std::string GameLanguage::MAC2 = "MAC + {0}~{1}";
std::string GameLanguage::Luck = "Luck + {0}";
std::string GameLanguage::DeleteCharacter = "Are you sure you want to Delete the character {0}";
std::string GameLanguage::CharacterDeleted = "Your character was deleted successfully.";
std::string GameLanguage::CharacterCreated = "Your character was created successfully.";
std::string GameLanguage::Resolution = "Resolution";
std::string GameLanguage::Autostart = "Auto start";
std::string GameLanguage::Usrname = "Username";
std::string GameLanguage::Password = "Password";
std::string GameLanguage::ShuttingDown = "Disconnected: Server is shutting down.";
std::string GameLanguage::MaxCombine = "Max Combine Count : {0}{1}Shift + Left click to split the stack";
std::string GameLanguage::Count = " Count {0}";
std::string GameLanguage::ExtraSlots8 = "Are you sure you would like to buy 8 extra slots for 1,000,000 gold?" + "Next purchase you can unlock 4 extra slots up to a maximum of 40 slots.";
std::string GameLanguage::ExtraSlots4 = "Are you sure you would like to unlock 4 extra slots? for gold: {0:###,###}";
std::string GameLanguage::Chat_All = "All";
std::string GameLanguage::Chat_Short = "Shout";
std::string GameLanguage::Chat_Whisper = "Whisper";
std::string GameLanguage::Chat_Lover = "Lover";
std::string GameLanguage::Chat_Mentor = "Mentor";
std::string GameLanguage::Chat_Group = "Group";
std::string GameLanguage::Chat_Guild = "Guild";
std::string GameLanguage::ExpandedStorageLocked = "Expanded Storage Locked";
std::string GameLanguage::ExtraStorage = "Would you like to rent extra storage for 10 days at a cost of 1,000,000 gold?";
std::string GameLanguage::ExtendYourRentalPeriod = "Would you like to extend your rental period for 10 days at a cost of 1,000,000 gold?";
std::string GameLanguage::CannotLeaveGame = "Cannot leave game for {0} seconds";
std::string GameLanguage::SelectKey = "Select the Key for: {0}";
std::string GameLanguage::WeaponSpiritFire = "Your weapon is glowed by spirit of fire.";
std::string GameLanguage::SpiritsFireDisappeared = "The spirits of fire disappeared.";
std::string GameLanguage::WeddingRing = "WeddingRing";
std::string GameLanguage::ItemTextFormat = "{0}{1}{2} {3}";
std::string GameLanguage::DropAmount = "Drop Amount:";
std::string GameLanguage::LowMana = "Not Enough Mana to cast.";
std::string GameLanguage::NoCreatures = "You do not own any creatures.";
std::string GameLanguage::NoMount = "You do not own a mount.";
std::string GameLanguage::NoFishingRod = "You are not holding a fishing rod.";
std::string GameLanguage::AttemptingConnect = "Attempting to connect to the server.{0}Attempt:{1}";
std::string GameLanguage::CreatingCharactersDisabled = "Creating new characters is currently disabled.";
std::string GameLanguage::InvalidCharacterName = "Your Character Name is not acceptable.";
std::string GameLanguage::NoClass = "The class you selected does not exist. Contact a GM for assistance.";
std::string GameLanguage::ToManyCharacters = "You cannot make anymore then {0} Characters.";
std::string GameLanguage::CharacterNameExists = "A Character with this name already exists.";
std::string GameLanguage::WarriorsDes = "Warriors are a class of great strength and vitality. They are not easily killed in battle and have the advantage of being able to use" + " a variety of heavy weapons and Armour. Therefore, Warriors favor attacks that are based on melee physical damage. They are weak in ranged" + " attacks, however the variety of equipment that are developed specifically for Warriors complement their weakness in ranged combat.";
std::string GameLanguage::WizardDes = "Wizards are a class of low strength and stamina, but have the ability to use powerful spells. Their offensive spells are very effective, but" + " because it takes time to cast these spells, they're likely to leave themselves open for enemy's attacks. Therefore, the physically weak wizards" + " must aim to attack their enemies from a safe distance.";
std::string GameLanguage::TaoistDes = "Taoists are well disciplined in the study of Astronomy, Medicine, and others aside from Mu-Gong. Rather then directly engaging the enemies, their" + " specialty lies in assisting their allies with support. Taoists can summon powerful creatures and have a high resistance to magic, and is a class" + " with well balanced offensive and defensive abilities.";
std::string GameLanguage::AssassinDes = "Assassins are members of a secret organization and their history is relatively unknown. They're capable of hiding themselves and performing attacks" + " while being unseen by others, which naturally makes them excellent at making fast kills. It is necessary for them to avoid being in battles with" + " multiple enemies due to their weak vitality and strength.";
std::string GameLanguage::ArcherDes = "Archers are a class of great accuracy and strength, using their powerful skills with bows to deal extraordinary damage from range. Much like" + " wizards, they rely on their keen instincts to dodge oncoming attacks as they tend to leave themselves open to frontal attacks. However, their" + " physical prowess and deadly aim allows them to instil fear into anyone they hit.";
std::string GameLanguage::DateSent = "Date Sent : {0}";
std::string GameLanguage::Send = "Send";
std::string GameLanguage::Reply = "Reply";
std::string GameLanguage::Read = "Read";
std::string GameLanguage::Delete = "Delete";
std::string GameLanguage::BlockList = "Block List";
std::string GameLanguage::EnterMailToName = "Please enter the name of the person you would like to mail.";
std::string GameLanguage::AddFriend = "Add";
std::string GameLanguage::RemoveFriend = "Remove";
std::string GameLanguage::FriendMemo = "Memo";
std::string GameLanguage::FriendMail = "Mail";
std::string GameLanguage::FriendWhisper = "Whisper";
std::string GameLanguage::FriendEnterAddName = "Please enter the name of the person you would like to Add.";
std::string GameLanguage::FriendEnterBlockName = "Please enter the name of the person you would like to Block.";
std::string GameLanguage::AddMentor = "Add Mentor";
std::string GameLanguage::RemoveMentorMentee = "Remove Mentor/Mentee";
std::string GameLanguage::MentorRequests = "Allow/Disallow Mentor Requests";
std::string GameLanguage::MentorEnterName = "Please enter the name of the person you would like to be your Mentor.";
std::string GameLanguage::RestedBuff = "Rested{0}Increases Exp Rate by {1}%{2}";
std::string GameLanguage::ItemTypeWeapon = "Weapon";
std::string GameLanguage::ItemTypeArmour = "Armour";
std::string GameLanguage::ItemTypeHelmet = "Helmet";
std::string GameLanguage::ItemTypeNecklace = "Necklace";
std::string GameLanguage::ItemTypeBracelet = "Bracelet";
std::string GameLanguage::ItemTypeRing = "Ring";
std::string GameLanguage::ItemTypeAmulet = "Amulet";
std::string GameLanguage::ItemTypeBelt = "Belt";
std::string GameLanguage::ItemTypeBoots = "Boots";
std::string GameLanguage::ItemTypeStone = "Stone";
std::string GameLanguage::ItemTypeTorch = "Torch";
std::string GameLanguage::ItemTypePotion = "Potion";
std::string GameLanguage::ItemTypeOre = "Ore";
std::string GameLanguage::ItemTypeMeat = "Meat";
std::string GameLanguage::ItemTypeCraftingMaterial = "CraftingMaterial";
std::string GameLanguage::ItemTypeScroll = "Scroll";
std::string GameLanguage::ItemTypeGem = "Gem";
std::string GameLanguage::ItemTypeMount = "Mount";
std::string GameLanguage::ItemTypeBook = "Book";
std::string GameLanguage::ItemTypeScript = "Script";
std::string GameLanguage::ItemTypeReins = "Reins";
std::string GameLanguage::ItemTypeBells = "Bells";
std::string GameLanguage::ItemTypeSaddle = "Saddle";
std::string GameLanguage::ItemTypeRibbon = "Ribbon";
std::string GameLanguage::ItemTypeMask = "Mask";
std::string GameLanguage::ItemTypeFood = "Food";
std::string GameLanguage::ItemTypeHook = "Hook";
std::string GameLanguage::ItemTypeFloat = "Float";
std::string GameLanguage::ItemTypeBait = "Bait";
std::string GameLanguage::ItemTypeFinder = "Finder";
std::string GameLanguage::ItemTypeReel = "Reel";
std::string GameLanguage::ItemTypeFish = "Fish";
std::string GameLanguage::ItemTypeQuest = "Quest";
std::string GameLanguage::ItemTypeAwakening = "Awakening";
std::string GameLanguage::ItemTypePets = "Pets";
std::string GameLanguage::ItemTypeTransform = "Transform";
std::string GameLanguage::ItemTypeDeco = "Deco";
std::string GameLanguage::ItemGradeCommon = "Common";
std::string GameLanguage::ItemGradeRare = "Rare";
std::string GameLanguage::ItemGradeLegendary = "Legendary";
std::string GameLanguage::ItemGradeMythical = "Mythical";
std::string GameLanguage::NoAccountID = "The AccountID does not exist.";
std::string GameLanguage::IncorrectPasswordAccountID = "Incorrect Password and AccountID combination.";
std::string GameLanguage::GroupSwitch = "Allow/Disallow Group Requests";
std::string GameLanguage::GroupAdd = "Add";
std::string GameLanguage::GroupRemove = "Remove";
std::string GameLanguage::GroupAddEnterName = "Please enter the name of the person you wish to add.";
std::string GameLanguage::GroupRemoveEnterName = "Please enter the name of the person you wish to remove.";
std::string GameLanguage::TooHeavyToHold = "It is too heavy to Hold.";
std::string GameLanguage::SwitchMarriage = "Allow/Block Marriage";
std::string GameLanguage::RequestMarriage = "Request Marriage";
std::string GameLanguage::RequestDivorce = "Request Divorce";
std::string GameLanguage::MailLover = "Mail Lover";
std::string GameLanguage::WhisperLover = "Whisper Lover";
std::string GameLanguage::Welcome = "Welcome to the {0} Server.";
std::string GameLanguage::OnlinePlayers = "Online Players: {0}";
std::string GameLanguage::WeaponLuck = "Luck dwells within your weapon.";
std::string GameLanguage::WeaponCurse = "Curse dwells within your weapon.";
std::string GameLanguage::WeaponNoEffect = "No effect.";
std::string GameLanguage::InventoryIncreased = "Inventory size increased.";
std::string GameLanguage::FaceToTrade = "You must face someone to trade.";
std::string GameLanguage::NoTownTeleport = "You cannot use Town Teleports here";
std::string GameLanguage::CanNotRandom = "You cannot use Random Teleports here";
std::string GameLanguage::CanNotDungeon = "You cannot use Dungeon Escapes here";
std::string GameLanguage::CannotResurrection = "You cannot use Resurrection Scrolls whilst alive";
std::string GameLanguage::CanNotDrop = "You cannot drop items on this map";
std::string GameLanguage::NewMail = "New mail has arrived.";
std::string GameLanguage::CouldNotFindPlayer = "Could not find player {0}";
std::string GameLanguage::BeenPoisoned = "You have been poisoned";
std::string GameLanguage::AllowingMentorRequests = "You're now allowing mentor requests.";
std::string GameLanguage::BlockingMentorRequests = "You're now blocking mentor requests.";
std::string GameLanguage::LowLevel = "You are not a high enough level.";
std::string GameLanguage::LowGold = "Not enough gold.";
std::string GameLanguage::LevelUp = "Congratulations! You have leveled up. Your HP and MP have been restored.";
std::string GameLanguage::LowDC = "You do not have enough DC.";
std::string GameLanguage::LowMC = "You do not have enough MC.";
std::string GameLanguage::LowSC = "You do not have enough SC.";
std::string GameLanguage::GameName = "Legend of Mir 2";
std::string GameLanguage::ExpandedStorageExpiresOn = "Expanded Storage Expires On";
std::string GameLanguage::NotFemale = "You are not Female.";
std::string GameLanguage::NotMale = "You are not Male.";
std::string GameLanguage::NotInGuild = "You are not in a guild";
std::string GameLanguage::NoMentorship = "You don't currently have a Mentorship to cancel.";
std::string GameLanguage::NoBagSpace = "You do not have enough space.";

void GameLanguage::LoadClientLanguage(const std::string &languageIniPath)
{
    if (!FileSystem::fileExists(languageIniPath))
    {
        SaveClientLanguage(languageIniPath);
        return;
    }

    InIReader *reader = new InIReader(languageIniPath);
    GameLanguage::PetMode_Both = reader->ReadString("Language", "PetMode_Both", GameLanguage::PetMode_Both);
    GameLanguage::PetMode_MoveOnly = reader->ReadString("Language", "PetMode_MoveOnly", GameLanguage::PetMode_MoveOnly);
    GameLanguage::PetMode_AttackOnly = reader->ReadString("Language", "PetMode_AttackOnly", GameLanguage::PetMode_AttackOnly);
    GameLanguage::PetMode_None = reader->ReadString("Language", "PetMode_None", GameLanguage::PetMode_None);

    GameLanguage::AttackMode_Peace = reader->ReadString("Language", "AttackMode_Peace", GameLanguage::AttackMode_Peace);
    GameLanguage::AttackMode_Group = reader->ReadString("Language", "AttackMode_Group", GameLanguage::AttackMode_Group);
    GameLanguage::AttackMode_Guild = reader->ReadString("Language", "AttackMode_Guild", GameLanguage::AttackMode_Guild);
    GameLanguage::AttackMode_EnemyGuild = reader->ReadString("Language", "AttackMode_EnemyGuild", GameLanguage::AttackMode_EnemyGuild);
    GameLanguage::AttackMode_RedBrown = reader->ReadString("Language", "AttackMode_RedBrown", GameLanguage::AttackMode_RedBrown);
    GameLanguage::AttackMode_All = reader->ReadString("Language", "AttackMode_All", GameLanguage::AttackMode_All);

    GameLanguage::LogOutTip = reader->ReadString("Language", "LogOutTip", GameLanguage::LogOutTip);
    GameLanguage::ExitTip = reader->ReadString("Language", "ExitTip", GameLanguage::ExitTip);
    GameLanguage::DiedTip = reader->ReadString("Language", "DiedTip", GameLanguage::DiedTip);
    GameLanguage::DropTip = reader->ReadString("Language", "DropTip", GameLanguage::DropTip);

    GameLanguage::Inventory = reader->ReadString("Language", "Inventory", GameLanguage::Inventory);
    GameLanguage::Character = reader->ReadString("Language", "Character", GameLanguage::Character);
    GameLanguage::Skills = reader->ReadString("Language", "Skills", GameLanguage::Skills);
    GameLanguage::Quests = reader->ReadString("Language", "Quests", GameLanguage::Quests);
    GameLanguage::Options = reader->ReadString("Language", "Options", GameLanguage::Options);
    GameLanguage::Menu = reader->ReadString("Language", "Menu", GameLanguage::Menu);
    GameLanguage::GameShop = reader->ReadString("Language", "GameShop", GameLanguage::GameShop);
    GameLanguage::BigMap = reader->ReadString("Language", "BigMap", GameLanguage::BigMap);
    GameLanguage::DuraPanel = reader->ReadString("Language", "DuraPanel", GameLanguage::DuraPanel);
    GameLanguage::Mail = reader->ReadString("Language", "Mail", GameLanguage::Mail);
    GameLanguage::Exit = reader->ReadString("Language", "Exit", GameLanguage::Exit);
    GameLanguage::LogOut = reader->ReadString("Language", "LogOut", GameLanguage::LogOut);
    GameLanguage::Help = reader->ReadString("Language", "Help", GameLanguage::Help);
    GameLanguage::Keybinds = reader->ReadString("Language", "Keybinds", GameLanguage::Keybinds);
    GameLanguage::Ranking = reader->ReadString("Language", "Ranking", GameLanguage::Ranking);
    GameLanguage::Creatures = reader->ReadString("Language", "Creatures", GameLanguage::Creatures);
    GameLanguage::Mount = reader->ReadString("Language", "Mount", GameLanguage::Mount);
    GameLanguage::Fishing = reader->ReadString("Language", "Fishing", GameLanguage::Fishing);
    GameLanguage::Friends = reader->ReadString("Language", "Friends", GameLanguage::Friends);
    GameLanguage::Mentor = reader->ReadString("Language", "Mentor", GameLanguage::Mentor);
    GameLanguage::Relationship = reader->ReadString("Language", "Relationship", GameLanguage::Relationship);
    GameLanguage::Groups = reader->ReadString("Language", "Groups", GameLanguage::Groups);
    GameLanguage::Guild = reader->ReadString("Language", "Guild", GameLanguage::Guild);
    GameLanguage::Trade = reader->ReadString("Language", "Trade", GameLanguage::Trade);
    GameLanguage::Size = reader->ReadString("Language", "Size", GameLanguage::Size);
    GameLanguage::ChatSettings = reader->ReadString("Language", "ChatSettings", GameLanguage::ChatSettings);
    GameLanguage::Rotate = reader->ReadString("Language", "Rotate", GameLanguage::Rotate);
    GameLanguage::Close = reader->ReadString("Language", "Close", GameLanguage::Close);
    GameLanguage::GameMaster = reader->ReadString("Language", "GameMaster", GameLanguage::GameMaster);
    GameLanguage::Expire = reader->ReadString("Language", "Expire", GameLanguage::Expire);
    GameLanguage::ExpireNever = reader->ReadString("Language", "ExpireNever", GameLanguage::ExpireNever);
    GameLanguage::Never = reader->ReadString("Language", "Never", GameLanguage::Never);

    GameLanguage::PatchErr = reader->ReadString("Language", "PatchErr", GameLanguage::PatchErr);
    GameLanguage::LastOnline = reader->ReadString("Language", "LastOnline", GameLanguage::LastOnline);

    GameLanguage::LowLevel = reader->ReadString("Language", "LowLevel", GameLanguage::LowLevel);
    GameLanguage::LowGold = reader->ReadString("Language", "LowGold", GameLanguage::LowGold);
    GameLanguage::LowDC = reader->ReadString("Language", "LowDC", GameLanguage::LowDC);
    GameLanguage::LowMC = reader->ReadString("Language", "LowMC", GameLanguage::LowMC);
    GameLanguage::LowSC = reader->ReadString("Language", "LowSC", GameLanguage::LowSC);

    GameLanguage::Gold = reader->ReadString("Language", "Gold", GameLanguage::Gold);
    GameLanguage::Credit = reader->ReadString("Language", "Credit", GameLanguage::Credit);

    GameLanguage::YouGained = reader->ReadString("Language", "YouGained", GameLanguage::YouGained);
    GameLanguage::YouGained2 = reader->ReadString("Language", "YouGained2", GameLanguage::YouGained2);
    GameLanguage::ExperienceGained = reader->ReadString("Language", "ExperienceGained", GameLanguage::ExperienceGained);
    GameLanguage::LevelUp = reader->ReadString("Language", "LevelUp", GameLanguage::LevelUp);

    GameLanguage::ItemDescription = reader->ReadString("Language", "ItemDescription", GameLanguage::ItemDescription);
    GameLanguage::RequiredLevel = reader->ReadString("Language", "RequiredLevel", GameLanguage::RequiredLevel);
    GameLanguage::RequiredDC = reader->ReadString("Language", "RequiredDC", GameLanguage::RequiredDC);
    GameLanguage::RequiredMC = reader->ReadString("Language", "RequiredMC", GameLanguage::RequiredMC);
    GameLanguage::RequiredSC = reader->ReadString("Language", "RequiredSC", GameLanguage::RequiredSC);
    GameLanguage::ClassRequired = reader->ReadString("Language", "ClassRequired", GameLanguage::ClassRequired);
    GameLanguage::Holy = reader->ReadString("Language", "Holy", GameLanguage::Holy);
    GameLanguage::Holy2 = reader->ReadString("Language", "Holy2", GameLanguage::Holy2);
    GameLanguage::Accuracy = reader->ReadString("Language", "Accuracy", GameLanguage::Accuracy);
    GameLanguage::Accuracy2 = reader->ReadString("Language", "Accuracy2", GameLanguage::Accuracy2);
    GameLanguage::Agility = reader->ReadString("Language", "Agility", GameLanguage::Agility);
    GameLanguage::Agility2 = reader->ReadString("Language", "Agility2", GameLanguage::Agility2);
    GameLanguage::DC = reader->ReadString("Language", "DC", GameLanguage::DC);
    GameLanguage::DC2 = reader->ReadString("Language", "DC2", GameLanguage::DC2);
    GameLanguage::MC = reader->ReadString("Language", "MC", GameLanguage::MC);
    GameLanguage::MC2 = reader->ReadString("Language", "MC2", GameLanguage::MC2);
    GameLanguage::SC = reader->ReadString("Language", "SC", GameLanguage::SC);
    GameLanguage::SC2 = reader->ReadString("Language", "SC2", GameLanguage::SC2);
    GameLanguage::Durability = reader->ReadString("Language", "Durability", GameLanguage::Durability);
    GameLanguage::Weight = reader->ReadString("Language", "Weight", GameLanguage::Weight);
    GameLanguage::AC = reader->ReadString("Language", "AC", GameLanguage::AC);
    GameLanguage::AC2 = reader->ReadString("Language", "AC2", GameLanguage::AC2);
    GameLanguage::MAC = reader->ReadString("Language", "MAC", GameLanguage::MAC);
    GameLanguage::MAC2 = reader->ReadString("Language", "MAC2", GameLanguage::MAC2);
    GameLanguage::Luck = reader->ReadString("Language", "Luck", GameLanguage::Luck);

    GameLanguage::DeleteCharacter = reader->ReadString("Language", "DeleteCharacter", GameLanguage::DeleteCharacter);
    GameLanguage::CharacterDeleted = reader->ReadString("Language", "CharacterDeleted", GameLanguage::CharacterDeleted);
    GameLanguage::CharacterCreated = reader->ReadString("Language", "CharacterCreated", GameLanguage::CharacterCreated);

    GameLanguage::Resolution = reader->ReadString("Language", "Resolution", GameLanguage::Resolution);
    GameLanguage::Autostart = reader->ReadString("Language", "Autostart", GameLanguage::Autostart);
    GameLanguage::Usrname = reader->ReadString("Language", "Usrname", GameLanguage::Usrname);
    GameLanguage::Password = reader->ReadString("Language", "Password", GameLanguage::Password);

    GameLanguage::ShuttingDown = reader->ReadString("Language", "ShuttingDown", GameLanguage::ShuttingDown);

    GameLanguage::MaxCombine = reader->ReadString("Language", "MaxCombine", GameLanguage::MaxCombine);
    GameLanguage::Count = reader->ReadString("Language", "Count", GameLanguage::Count);
    GameLanguage::ExtraSlots8 = reader->ReadString("Language", "ExtraSlots8", GameLanguage::ExtraSlots8);
    GameLanguage::ExtraSlots4 = reader->ReadString("Language", "ExtraSlots4", GameLanguage::ExtraSlots4);

    GameLanguage::Chat_All = reader->ReadString("Language", "Chat_All", GameLanguage::Chat_All);
    GameLanguage::Chat_Short = reader->ReadString("Language", "Chat_Short", GameLanguage::Chat_Short);
    GameLanguage::Chat_Whisper = reader->ReadString("Language", "Chat_Whisper", GameLanguage::Chat_Whisper);
    GameLanguage::Chat_Lover = reader->ReadString("Language", "Chat_Lover", GameLanguage::Chat_Lover);
    GameLanguage::Chat_Mentor = reader->ReadString("Language", "Chat_Mentor", GameLanguage::Chat_Mentor);
    GameLanguage::Chat_Group = reader->ReadString("Language", "Chat_Group", GameLanguage::Chat_Group);
    GameLanguage::Chat_Guild = reader->ReadString("Language", "Chat_Guild", GameLanguage::Chat_Guild);
    GameLanguage::ExpandedStorageLocked = reader->ReadString("Language", "ExpandedStorageLocked", GameLanguage::ExpandedStorageLocked);
    GameLanguage::ExtraStorage = reader->ReadString("Language", "ExtraStorage", GameLanguage::ExtraStorage);
    GameLanguage::ExtendYourRentalPeriod = reader->ReadString("Language", "ExtendYourRentalPeriod", GameLanguage::ExtendYourRentalPeriod);
    GameLanguage::ExpandedStorageExpiresOn = reader->ReadString("Language", "ExpandedStorageExpiresOn", GameLanguage::ExpandedStorageExpiresOn);
    GameLanguage::GameName = reader->ReadString("Language", "GameName", GameLanguage::GameName);
    GameLanguage::CannotLeaveGame = reader->ReadString("Language", "CannotLeaveGame", GameLanguage::CannotLeaveGame);
    GameLanguage::SelectKey = reader->ReadString("Language", "SelectKey", GameLanguage::SelectKey);
    GameLanguage::WeaponSpiritFire = reader->ReadString("Language", "WeaponSpiritFire", GameLanguage::WeaponSpiritFire);
    GameLanguage::SpiritsFireDisappeared = reader->ReadString("Language", "SpiritsFireDisappeared", GameLanguage::SpiritsFireDisappeared);
    GameLanguage::WeddingRing = reader->ReadString("Language", "WeddingRing", GameLanguage::WeddingRing);
    GameLanguage::ItemTextFormat = reader->ReadString("Language", "ItemTextFormat", GameLanguage::ItemTextFormat);
    GameLanguage::DropAmount = reader->ReadString("Language", "DropAmount", GameLanguage::DropAmount);
    GameLanguage::LowMana = reader->ReadString("Language", "LowMana", GameLanguage::LowMana);

    GameLanguage::NotFemale = reader->ReadString("Language", "NotFemale", GameLanguage::NotFemale);
    GameLanguage::NotMale = reader->ReadString("Language", "NotMale", GameLanguage::NotMale);
    GameLanguage::NoCreatures = reader->ReadString("Language", "NoCreatures", GameLanguage::NoCreatures);
    GameLanguage::NoMount = reader->ReadString("Language", "NoMount", GameLanguage::NoMount);
    GameLanguage::NoFishingRod = reader->ReadString("Language", "NoFishingRod", GameLanguage::NoFishingRod);
    GameLanguage::NotInGuild = reader->ReadString("Language", "NotInGuild", GameLanguage::NotInGuild);
    GameLanguage::NoBagSpace = reader->ReadString("Language", "NoBagSpace", GameLanguage::NoBagSpace);
    GameLanguage::AttemptingConnect = reader->ReadString("Language", "AttemptingConnect", GameLanguage::AttemptingConnect);

    GameLanguage::CreatingCharactersDisabled = reader->ReadString("Language", "CreatingCharactersDisabled", GameLanguage::CreatingCharactersDisabled);
    GameLanguage::InvalidCharacterName = reader->ReadString("Language", "InvalidCharacterName", GameLanguage::InvalidCharacterName);
    GameLanguage::NoClass = reader->ReadString("Language", "NoClass", GameLanguage::NoClass);
    GameLanguage::ToManyCharacters = reader->ReadString("Language", "ToManyCharacters", GameLanguage::ToManyCharacters);
    GameLanguage::CharacterNameExists = reader->ReadString("Language", "CharacterNameExists", GameLanguage::CharacterNameExists);

    GameLanguage::WarriorsDes = reader->ReadString("Language", "WarriorsDes", GameLanguage::WarriorsDes);
    GameLanguage::WizardDes = reader->ReadString("Language", "WizardDes", GameLanguage::WizardDes);
    GameLanguage::TaoistDes = reader->ReadString("Language", "TaoistDes", GameLanguage::TaoistDes);
    GameLanguage::AssassinDes = reader->ReadString("Language", "AssassinDes", GameLanguage::AssassinDes);
    GameLanguage::ArcherDes = reader->ReadString("Language", "ArcherDes", GameLanguage::ArcherDes);

    GameLanguage::DateSent = reader->ReadString("Language", "DateSent", GameLanguage::DateSent);
    GameLanguage::Send = reader->ReadString("Language", "Send", GameLanguage::Send);
    GameLanguage::Reply = reader->ReadString("Language", "Reply", GameLanguage::Reply);
    GameLanguage::Read = reader->ReadString("Language", "Read", GameLanguage::Read);
    GameLanguage::Delete = reader->ReadString("Language", "Delete", GameLanguage::Delete);
    GameLanguage::BlockList = reader->ReadString("Language", "BlockList", GameLanguage::BlockList);
    GameLanguage::EnterMailToName = reader->ReadString("Language", "EnterMailToName", GameLanguage::EnterMailToName);
    GameLanguage::BeenPoisoned = reader->ReadString("Language", "BeenPoisoned", GameLanguage::BeenPoisoned);
    GameLanguage::AddFriend = reader->ReadString("Language", "AddFriend", GameLanguage::AddFriend);
    GameLanguage::RemoveFriend = reader->ReadString("Language", "RemoveFriend", GameLanguage::RemoveFriend);
    GameLanguage::FriendMemo = reader->ReadString("Language", "FriendMemo", GameLanguage::FriendMemo);
    GameLanguage::FriendMail = reader->ReadString("Language", "FriendMail", GameLanguage::FriendMail);
    GameLanguage::FriendWhisper = reader->ReadString("Language", "FriendWhisper", GameLanguage::FriendWhisper);
    GameLanguage::FriendEnterAddName = reader->ReadString("Language", "FriendEnterAddName", GameLanguage::FriendEnterAddName);
    GameLanguage::FriendEnterBlockName = reader->ReadString("Language", "FriendEnterBlockName", GameLanguage::FriendEnterBlockName);
    GameLanguage::AddMentor = reader->ReadString("Language", "AddMentor", GameLanguage::AddMentor);
    GameLanguage::RemoveMentorMentee = reader->ReadString("Language", "RemoveMentorMentee", GameLanguage::RemoveMentorMentee);
    GameLanguage::MentorRequests = reader->ReadString("Language", "MentorRequests", GameLanguage::MentorRequests);
    GameLanguage::MentorEnterName = reader->ReadString("Language", "MentorEnterName", GameLanguage::MentorEnterName);
    GameLanguage::NoMentorship = reader->ReadString("Language", "NoMentorship", GameLanguage::NoMentorship);
    GameLanguage::RestedBuff = reader->ReadString("Language", "RestedBuff", GameLanguage::RestedBuff);

    GameLanguage::ItemTypeWeapon = reader->ReadString("Language", "ItemTypeWeapon", GameLanguage::ItemTypeWeapon);
    GameLanguage::ItemTypeArmour = reader->ReadString("Language", "ItemTypeArmour", GameLanguage::ItemTypeArmour);
    GameLanguage::ItemTypeHelmet = reader->ReadString("Language", "ItemTypeHelmet", GameLanguage::ItemTypeHelmet);
    GameLanguage::ItemTypeNecklace = reader->ReadString("Language", "ItemTypeNecklace", GameLanguage::ItemTypeNecklace);
    GameLanguage::ItemTypeBracelet = reader->ReadString("Language", "ItemTypeBracelet", GameLanguage::ItemTypeBracelet);
    GameLanguage::ItemTypeRing = reader->ReadString("Language", "ItemTypeRing", GameLanguage::ItemTypeRing);
    GameLanguage::ItemTypeAmulet = reader->ReadString("Language", "ItemTypeAmulet", GameLanguage::ItemTypeAmulet);
    GameLanguage::ItemTypeBelt = reader->ReadString("Language", "ItemTypeBelt", GameLanguage::ItemTypeBelt);
    GameLanguage::ItemTypeBoots = reader->ReadString("Language", "ItemTypeBoots", GameLanguage::ItemTypeBoots);
    GameLanguage::ItemTypeStone = reader->ReadString("Language", "ItemTypeStone", GameLanguage::ItemTypeStone);
    GameLanguage::ItemTypeTorch = reader->ReadString("Language", "ItemTypeTorch", GameLanguage::ItemTypeTorch);
    GameLanguage::ItemTypePotion = reader->ReadString("Language", "ItemTypePotion", GameLanguage::ItemTypePotion);
    GameLanguage::ItemTypeOre = reader->ReadString("Language", "ItemTypeOre", GameLanguage::ItemTypeOre);
    GameLanguage::ItemTypeMeat = reader->ReadString("Language", "ItemTypeMeat", GameLanguage::ItemTypeMeat);
    GameLanguage::ItemTypeCraftingMaterial = reader->ReadString("Language", "ItemTypeCraftingMaterial", GameLanguage::ItemTypeCraftingMaterial);
    GameLanguage::ItemTypeScroll = reader->ReadString("Language", "ItemTypeScroll", GameLanguage::ItemTypeScroll);
    GameLanguage::ItemTypeGem = reader->ReadString("Language", "ItemTypeGem", GameLanguage::ItemTypeGem);
    GameLanguage::ItemTypeMount = reader->ReadString("Language", "ItemTypeMount", GameLanguage::ItemTypeMount);
    GameLanguage::ItemTypeBook = reader->ReadString("Language", "ItemTypeBook", GameLanguage::ItemTypeBook);
    GameLanguage::ItemTypeScript = reader->ReadString("Language", "ItemTypeScript", GameLanguage::ItemTypeScript);
    GameLanguage::ItemTypeReins = reader->ReadString("Language", "ItemTypeReins", GameLanguage::ItemTypeReins);
    GameLanguage::ItemTypeBells = reader->ReadString("Language", "ItemTypeBells", GameLanguage::ItemTypeBells);
    GameLanguage::ItemTypeSaddle = reader->ReadString("Language", "ItemTypeSaddle", GameLanguage::ItemTypeSaddle);
    GameLanguage::ItemTypeRibbon = reader->ReadString("Language", "ItemTypeRibbon", GameLanguage::ItemTypeRibbon);
    GameLanguage::ItemTypeMask = reader->ReadString("Language", "ItemTypeMask", GameLanguage::ItemTypeMask);
    GameLanguage::ItemTypeFood = reader->ReadString("Language", "ItemTypeFood", GameLanguage::ItemTypeFood);
    GameLanguage::ItemTypeHook = reader->ReadString("Language", "ItemTypeHook", GameLanguage::ItemTypeHook);
    GameLanguage::ItemTypeFloat = reader->ReadString("Language", "ItemTypeFloat", GameLanguage::ItemTypeFloat);
    GameLanguage::ItemTypeBait = reader->ReadString("Language", "ItemTypeBait", GameLanguage::ItemTypeBait);
    GameLanguage::ItemTypeFinder = reader->ReadString("Language", "ItemTypeFinder", GameLanguage::ItemTypeFinder);
    GameLanguage::ItemTypeReel = reader->ReadString("Language", "ItemTypeReel", GameLanguage::ItemTypeReel);
    GameLanguage::ItemTypeFish = reader->ReadString("Language", "ItemTypeFish", GameLanguage::ItemTypeFish);
    GameLanguage::ItemTypeQuest = reader->ReadString("Language", "ItemTypeQuest", GameLanguage::ItemTypeQuest);
    GameLanguage::ItemTypeAwakening = reader->ReadString("Language", "ItemTypeAwakening", GameLanguage::ItemTypeAwakening);
    GameLanguage::ItemTypePets = reader->ReadString("Language", "ItemTypePets", GameLanguage::ItemTypePets);
    GameLanguage::ItemTypeTransform = reader->ReadString("Language", "ItemTypeTransform", GameLanguage::ItemTypeTransform);

    GameLanguage::ItemGradeCommon = reader->ReadString("Language", "ItemGradeCommon", GameLanguage::ItemGradeCommon);
    GameLanguage::ItemGradeRare = reader->ReadString("Language", "ItemGradeRare", GameLanguage::ItemGradeRare);
    GameLanguage::ItemGradeLegendary = reader->ReadString("Language", "ItemGradeLegendary", GameLanguage::ItemGradeLegendary);
    GameLanguage::ItemGradeMythical = reader->ReadString("Language", "ItemGradeMythical", GameLanguage::ItemGradeMythical);

    GameLanguage::NoAccountID = reader->ReadString("Language", "NoAccountID", GameLanguage::NoAccountID);
    GameLanguage::IncorrectPasswordAccountID = reader->ReadString("Language", "IncorrectPasswordAccountID", GameLanguage::IncorrectPasswordAccountID);
    GameLanguage::GroupSwitch = reader->ReadString("Language", "GroupSwitch", GameLanguage::GroupSwitch);
    GameLanguage::GroupAdd = reader->ReadString("Language", "GroupAdd", GameLanguage::GroupAdd);
    GameLanguage::GroupRemove = reader->ReadString("Language", "GroupRemove", GameLanguage::GroupRemove);
    GameLanguage::GroupAddEnterName = reader->ReadString("Language", "GroupAddEnterName", GameLanguage::GroupAddEnterName);
    GameLanguage::GroupRemoveEnterName = reader->ReadString("Language", "GroupRemoveEnterName", GameLanguage::GroupRemoveEnterName);
    GameLanguage::TooHeavyToHold = reader->ReadString("Language", "TooHeavyToHold", GameLanguage::TooHeavyToHold);
    GameLanguage::SwitchMarriage = reader->ReadString("Language", "SwitchMarriage", GameLanguage::SwitchMarriage);
    GameLanguage::RequestMarriage = reader->ReadString("Language", "RequestMarriage", GameLanguage::RequestMarriage);
    GameLanguage::RequestDivorce = reader->ReadString("Language", "RequestDivorce", GameLanguage::RequestDivorce);
    GameLanguage::MailLover = reader->ReadString("Language", "MailLover", GameLanguage::MailLover);
    GameLanguage::WhisperLover = reader->ReadString("Language", "WhisperLover", GameLanguage::WhisperLover);

    delete reader;
}

void GameLanguage::SaveClientLanguage(const std::string &languageIniPath)
{
    File::Delete(languageIniPath);
    InIReader *reader = new InIReader(languageIniPath);
    reader->Write("Language", "PetMode_Both", GameLanguage::PetMode_Both);
    reader->Write("Language", "PetMode_MoveOnly", GameLanguage::PetMode_MoveOnly);
    reader->Write("Language", "PetMode_AttackOnly", GameLanguage::PetMode_AttackOnly);
    reader->Write("Language", "PetMode_None", GameLanguage::PetMode_None);

    reader->Write("Language", "AttackMode_Peace", GameLanguage::AttackMode_Peace);
    reader->Write("Language", "AttackMode_Group", GameLanguage::AttackMode_Group);
    reader->Write("Language", "AttackMode_Guild", GameLanguage::AttackMode_Guild);
    reader->Write("Language", "AttackMode_EnemyGuild", GameLanguage::AttackMode_EnemyGuild);
    reader->Write("Language", "AttackMode_RedBrown", GameLanguage::AttackMode_RedBrown);
    reader->Write("Language", "AttackMode_All", GameLanguage::AttackMode_All);

    reader->Write("Language", "LogOutTip", GameLanguage::LogOutTip);
    reader->Write("Language", "ExitTip", GameLanguage::ExitTip);
    reader->Write("Language", "DiedTip", GameLanguage::DiedTip);
    reader->Write("Language", "DropTip", GameLanguage::DropTip);

    reader->Write("Language", "Inventory", GameLanguage::Inventory);
    reader->Write("Language", "Character", GameLanguage::Character);
    reader->Write("Language", "Skills", GameLanguage::Skills);
    reader->Write("Language", "Quests", GameLanguage::Quests);
    reader->Write("Language", "Options", GameLanguage::Options);
    reader->Write("Language", "Menu", GameLanguage::Menu);
    reader->Write("Language", "GameShop", GameLanguage::GameShop);
    reader->Write("Language", "BigMap", GameLanguage::BigMap);
    reader->Write("Language", "DuraPanel", GameLanguage::DuraPanel);
    reader->Write("Language", "Mail", GameLanguage::Mail);
    reader->Write("Language", "Exit", GameLanguage::Exit);
    reader->Write("Language", "LogOut", GameLanguage::LogOut);
    reader->Write("Language", "Help", GameLanguage::Help);
    reader->Write("Language", "Keybinds", GameLanguage::Keybinds);
    reader->Write("Language", "Ranking", GameLanguage::Ranking);
    reader->Write("Language", "Creatures", GameLanguage::Creatures);
    reader->Write("Language", "Mount", GameLanguage::Mount);
    reader->Write("Language", "Fishing", GameLanguage::Fishing);
    reader->Write("Language", "Friends", GameLanguage::Friends);
    reader->Write("Language", "Mentor", GameLanguage::Mentor);
    reader->Write("Language", "Relationship", GameLanguage::Relationship);
    reader->Write("Language", "Groups", GameLanguage::Groups);
    reader->Write("Language", "Guild", GameLanguage::Guild);
    reader->Write("Language", "Trade", GameLanguage::Trade);
    reader->Write("Language", "Size", GameLanguage::Size);
    reader->Write("Language", "ChatSettings", GameLanguage::ChatSettings);
    reader->Write("Language", "Rotate", GameLanguage::Rotate);
    reader->Write("Language", "Close", GameLanguage::Close);
    reader->Write("Language", "GameMaster", GameLanguage::GameMaster);


    reader->Write("Language", "Expire", GameLanguage::Expire);
    reader->Write("Language", "ExpireNever", GameLanguage::ExpireNever);
    reader->Write("Language", "Never", GameLanguage::Never);
    reader->Write("Language", "PatchErr", GameLanguage::PatchErr);
    reader->Write("Language", "LastOnline", GameLanguage::LastOnline);

    reader->Write("Language", "LowLevel", GameLanguage::LowLevel);
    reader->Write("Language", "LowGold", GameLanguage::LowGold);
    reader->Write("Language", "LowDC", GameLanguage::LowDC);
    reader->Write("Language", "LowMC", GameLanguage::LowMC);
    reader->Write("Language", "LowSC", GameLanguage::LowSC);

    reader->Write("Language", "Gold", GameLanguage::Gold);
    reader->Write("Language", "Credit", GameLanguage::Credit);

    reader->Write("Language", "YouGained", GameLanguage::YouGained);
    reader->Write("Language", "YouGained2", GameLanguage::YouGained2);
    reader->Write("Language", "ExperienceGained", GameLanguage::ExperienceGained);
    reader->Write("Language", "LevelUp", GameLanguage::LevelUp);

    reader->Write("Language", "ItemDescription", GameLanguage::ItemDescription);
    reader->Write("Language", "RequiredLevel", GameLanguage::RequiredLevel);
    reader->Write("Language", "RequiredDC", GameLanguage::RequiredDC);
    reader->Write("Language", "RequiredMC", GameLanguage::RequiredMC);
    reader->Write("Language", "RequiredSC", GameLanguage::RequiredSC);
    reader->Write("Language", "ClassRequired", GameLanguage::ClassRequired);
    reader->Write("Language", "Holy", GameLanguage::Holy);
    reader->Write("Language", "Accuracy", GameLanguage::Accuracy);
    reader->Write("Language", "Agility", GameLanguage::Agility);
    reader->Write("Language", "DC", GameLanguage::DC);
    reader->Write("Language", "MC", GameLanguage::MC);
    reader->Write("Language", "SC", GameLanguage::SC);
    reader->Write("Language", "Durability", GameLanguage::Durability);
    reader->Write("Language", "Weight", GameLanguage::Weight);
    reader->Write("Language", "AC", GameLanguage::AC);
    reader->Write("Language", "MAC", GameLanguage::MAC);
    reader->Write("Language", "Luck", GameLanguage::Luck);

    reader->Write("Language", "DeleteCharacter", GameLanguage::DeleteCharacter);
    reader->Write("Language", "CharacterDeleted", GameLanguage::CharacterDeleted);
    reader->Write("Language", "CharacterCreated", GameLanguage::CharacterCreated);

    reader->Write("Language", "Resolution", GameLanguage::Resolution);
    reader->Write("Language", "Autostart", GameLanguage::Autostart);
    reader->Write("Language", "Usrname", GameLanguage::Usrname);
    reader->Write("Language", "Password", GameLanguage::Password);

    reader->Write("Language", "ShuttingDown", GameLanguage::ShuttingDown);

    reader->Write("Language", "MaxCombine", GameLanguage::MaxCombine);
    reader->Write("Language", "Count", GameLanguage::Count);
    reader->Write("Language", "ExtraSlots8", GameLanguage::ExtraSlots8);
    reader->Write("Language", "ExtraSlots4", GameLanguage::ExtraSlots4);

    reader->Write("Language", "Chat_All", GameLanguage::Chat_All);
    reader->Write("Language", "Chat_Short", GameLanguage::Chat_Short);
    reader->Write("Language", "Chat_Whisper", GameLanguage::Chat_Whisper);
    reader->Write("Language", "Chat_Lover", GameLanguage::Chat_Lover);
    reader->Write("Language", "Chat_Mentor", GameLanguage::Chat_Mentor);
    reader->Write("Language", "Chat_Group", GameLanguage::Chat_Group);
    reader->Write("Language", "Chat_Guild", GameLanguage::Chat_Guild);
    reader->Write("Language", "ExpandedStorageLocked", GameLanguage::ExpandedStorageLocked);
    reader->Write("Language", "ExtraStorage", GameLanguage::ExtraStorage);
    reader->Write("Language", "ExtendYourRentalPeriod", GameLanguage::ExtendYourRentalPeriod);
    reader->Write("Language", "ExpandedStorageExpiresOn", GameLanguage::ExpandedStorageExpiresOn);
    reader->Write("Language", "GameName", GameLanguage::GameName);
    reader->Write("Language", "CannotLeaveGame", GameLanguage::CannotLeaveGame);
    reader->Write("Language", "SelectKey", GameLanguage::SelectKey);
    reader->Write("Language", "WeaponSpiritFire", GameLanguage::WeaponSpiritFire);
    reader->Write("Language", "SpiritsFireDisappeared", GameLanguage::SpiritsFireDisappeared);
    reader->Write("Language", "WeddingRing", GameLanguage::WeddingRing);
    reader->Write("Language", "ItemTextFormat", GameLanguage::ItemTextFormat);
    reader->Write("Language", "DropAmount", GameLanguage::DropAmount);
    reader->Write("Language", "LowMana", GameLanguage::LowMana);

    reader->Write("Language", "NotFemale", GameLanguage::NotFemale);
    reader->Write("Language", "NotMale", GameLanguage::NotMale);
    reader->Write("Language", "NoCreatures", GameLanguage::NoCreatures);
    reader->Write("Language", "NoMount", GameLanguage::NoMount);
    reader->Write("Language", "NoFishingRod", GameLanguage::NoFishingRod);
    reader->Write("Language", "NotInGuild", GameLanguage::NotInGuild);
    reader->Write("Language", "AttemptingConnect", GameLanguage::AttemptingConnect);
    reader->Write("Language", "NoBagSpace", GameLanguage::NoBagSpace);

    reader->Write("Language", "CreatingCharactersDisabled", GameLanguage::CreatingCharactersDisabled);
    reader->Write("Language", "InvalidCharacterName", GameLanguage::InvalidCharacterName);
    reader->Write("Language", "NoClass", GameLanguage::NoClass);
    reader->Write("Language", "ToManyCharacters", GameLanguage::ToManyCharacters);
    reader->Write("Language", "CharacterNameExists", GameLanguage::CharacterNameExists);

    reader->Write("Language", "WarriorsDes", GameLanguage::WarriorsDes);
    reader->Write("Language", "WizardDes", GameLanguage::WizardDes);
    reader->Write("Language", "TaoistDes", GameLanguage::TaoistDes);
    reader->Write("Language", "AssassinDes", GameLanguage::AssassinDes);
    reader->Write("Language", "ArcherDes", GameLanguage::ArcherDes);

    reader->Write("Language", "DateSent", GameLanguage::DateSent);
    reader->Write("Language", "Send", GameLanguage::Send);
    reader->Write("Language", "Reply", GameLanguage::Reply);
    reader->Write("Language", "Read", GameLanguage::Read);
    reader->Write("Language", "Delete", GameLanguage::Delete);
    reader->Write("Language", "BlockList", GameLanguage::BlockList);
    reader->Write("Language", "EnterMailToName", GameLanguage::EnterMailToName);
    reader->Write("Language", "BeenPoisoned", GameLanguage::BeenPoisoned);
    reader->Write("Language", "AddFriend", GameLanguage::AddFriend);
    reader->Write("Language", "RemoveFriend", GameLanguage::RemoveFriend);
    reader->Write("Language", "FriendMemo", GameLanguage::FriendMemo);
    reader->Write("Language", "FriendMail", GameLanguage::FriendMail);
    reader->Write("Language", "FriendWhisper", GameLanguage::FriendWhisper);
    reader->Write("Language", "FriendEnterAddName", GameLanguage::FriendEnterAddName);
    reader->Write("Language", "FriendEnterBlockName", GameLanguage::FriendEnterBlockName);
    reader->Write("Language", "AddMentor", GameLanguage::AddMentor);
    reader->Write("Language", "RemoveMentorMentee", GameLanguage::RemoveMentorMentee);
    reader->Write("Language", "MentorRequests", GameLanguage::MentorRequests);
    reader->Write("Language", "MentorEnterName", GameLanguage::MentorEnterName);
    reader->Write("Language", "NoMentorship", GameLanguage::NoMentorship);
    reader->Write("Language", "RestedBuff", GameLanguage::RestedBuff);

    reader->Write("Language", "ItemTypeWeapon", GameLanguage::ItemTypeWeapon);
    reader->Write("Language", "ItemTypeArmour", GameLanguage::ItemTypeArmour);
    reader->Write("Language", "ItemTypeHelmet", GameLanguage::ItemTypeHelmet);
    reader->Write("Language", "ItemTypeNecklace", GameLanguage::ItemTypeNecklace);
    reader->Write("Language", "ItemTypeBracelet", GameLanguage::ItemTypeBracelet);
    reader->Write("Language", "ItemTypeRing", GameLanguage::ItemTypeRing);
    reader->Write("Language", "ItemTypeAmulet", GameLanguage::ItemTypeAmulet);
    reader->Write("Language", "ItemTypeBelt", GameLanguage::ItemTypeBelt);
    reader->Write("Language", "ItemTypeBoots", GameLanguage::ItemTypeBoots);
    reader->Write("Language", "ItemTypeStone", GameLanguage::ItemTypeStone);
    reader->Write("Language", "ItemTypeTorch", GameLanguage::ItemTypeTorch);
    reader->Write("Language", "ItemTypePotion", GameLanguage::ItemTypePotion);
    reader->Write("Language", "ItemTypeOre", GameLanguage::ItemTypeOre);
    reader->Write("Language", "ItemTypeMeat", GameLanguage::ItemTypeMeat);
    reader->Write("Language", "ItemTypeCraftingMaterial", GameLanguage::ItemTypeCraftingMaterial);
    reader->Write("Language", "ItemTypeScroll", GameLanguage::ItemTypeScroll);
    reader->Write("Language", "ItemTypeGem", GameLanguage::ItemTypeGem);
    reader->Write("Language", "ItemTypeMount", GameLanguage::ItemTypeMount);
    reader->Write("Language", "ItemTypeBook", GameLanguage::ItemTypeBook);
    reader->Write("Language", "ItemTypeScript", GameLanguage::ItemTypeScript);
    reader->Write("Language", "ItemTypeReins", GameLanguage::ItemTypeReins);
    reader->Write("Language", "ItemTypeBells", GameLanguage::ItemTypeBells);
    reader->Write("Language", "ItemTypeSaddle", GameLanguage::ItemTypeSaddle);
    reader->Write("Language", "ItemTypeRibbon", GameLanguage::ItemTypeRibbon);
    reader->Write("Language", "ItemTypeMask", GameLanguage::ItemTypeMask);
    reader->Write("Language", "ItemTypeFood", GameLanguage::ItemTypeFood);
    reader->Write("Language", "ItemTypeHook", GameLanguage::ItemTypeHook);
    reader->Write("Language", "ItemTypeFloat", GameLanguage::ItemTypeFloat);
    reader->Write("Language", "ItemTypeBait", GameLanguage::ItemTypeBait);
    reader->Write("Language", "ItemTypeFinder", GameLanguage::ItemTypeFinder);
    reader->Write("Language", "ItemTypeReel", GameLanguage::ItemTypeReel);
    reader->Write("Language", "ItemTypeFish", GameLanguage::ItemTypeFish);
    reader->Write("Language", "ItemTypeQuest", GameLanguage::ItemTypeQuest);
    reader->Write("Language", "ItemTypeAwakening", GameLanguage::ItemTypeAwakening);
    reader->Write("Language", "ItemTypePets", GameLanguage::ItemTypePets);
    reader->Write("Language", "ItemTypeTransform", GameLanguage::ItemTypeTransform);

    reader->Write("Language", "ItemGradeCommon", GameLanguage::ItemGradeCommon);
    reader->Write("Language", "ItemGradeRare", GameLanguage::ItemGradeRare);
    reader->Write("Language", "ItemGradeLegendary", GameLanguage::ItemGradeLegendary);
    reader->Write("Language", "ItemGradeMythical", GameLanguage::ItemGradeMythical);

    reader->Write("Language", "NoAccountID", GameLanguage::NoAccountID);
    reader->Write("Language", "IncorrectPasswordAccountID", GameLanguage::IncorrectPasswordAccountID);
    reader->Write("Language", "GroupSwitch", GameLanguage::GroupSwitch);
    reader->Write("Language", "GroupAdd", GameLanguage::GroupAdd);
    reader->Write("Language", "GroupRemove", GameLanguage::GroupRemove);
    reader->Write("Language", "GroupAddEnterName", GameLanguage::GroupAddEnterName);
    reader->Write("Language", "GroupRemoveEnterName", GameLanguage::GroupRemoveEnterName);
    reader->Write("Language", "TooHeavyToHold", GameLanguage::TooHeavyToHold);
    reader->Write("Language", "SwitchMarriage", GameLanguage::SwitchMarriage);
    reader->Write("Language", "RequestMarriage", GameLanguage::RequestMarriage);
    reader->Write("Language", "RequestDivorce", GameLanguage::RequestDivorce);
    reader->Write("Language", "MailLover", GameLanguage::MailLover);
    reader->Write("Language", "WhisperLover", GameLanguage::WhisperLover);

    delete reader;
}

void GameLanguage::LoadServerLanguage(const std::string &languageIniPath)
{
    if (!FileSystem::fileExists(languageIniPath))
    {
        SaveServerLanguage(languageIniPath);
        return;
    }
    InIReader *reader = new InIReader(languageIniPath);
    GameLanguage::Welcome = reader->ReadString("Language", "Welcome", GameLanguage::Welcome);
    GameLanguage::OnlinePlayers = reader->ReadString("Language", "OnlinePlayers", GameLanguage::OnlinePlayers);
    GameLanguage::LowLevel = reader->ReadString("Language", "LowLevel", GameLanguage::LowLevel);
    GameLanguage::LowGold = reader->ReadString("Language", "LowGold", GameLanguage::LowGold);
    GameLanguage::LowDC = reader->ReadString("Language", "LowDC", GameLanguage::LowDC);
    GameLanguage::LowMC = reader->ReadString("Language", "LowMC", GameLanguage::LowMC);
    GameLanguage::LowSC = reader->ReadString("Language", "LowSC", GameLanguage::LowSC);

    GameLanguage::LevelUp = reader->ReadString("Language", "LevelUp", GameLanguage::LevelUp);

    GameLanguage::WeaponLuck = reader->ReadString("Language", "WeaponLuck", GameLanguage::WeaponLuck);
    GameLanguage::WeaponCurse = reader->ReadString("Language", "WeaponCurse", GameLanguage::WeaponCurse);
    GameLanguage::WeaponNoEffect = reader->ReadString("Language", "WeaponNoEffect", GameLanguage::WeaponNoEffect);

    GameLanguage::InventoryIncreased = reader->ReadString("Language", "InventoryIncreased", GameLanguage::InventoryIncreased);
    GameLanguage::ExpandedStorageExpiresOn = reader->ReadString("Language", "ExpandedStorageExpiresOn", GameLanguage::ExpandedStorageExpiresOn);
    GameLanguage::GameName = reader->ReadString("Language", "GameName", GameLanguage::GameName);
    GameLanguage::FaceToTrade = reader->ReadString("Language", "FaceToTrade", GameLanguage::FaceToTrade);
    GameLanguage::NoTownTeleport = reader->ReadString("Language", "NoTownTeleport", GameLanguage::NoTownTeleport);
    GameLanguage::CanNotRandom = reader->ReadString("Language", "CanNotRandom", GameLanguage::CanNotRandom);
    GameLanguage::CanNotDungeon = reader->ReadString("Language", "CanNotDungeon", GameLanguage::CanNotDungeon);
    GameLanguage::CannotResurrection = reader->ReadString("Language", "CannotResurrection", GameLanguage::CannotResurrection);
    GameLanguage::CanNotDrop = reader->ReadString("Language", "CanNotDrop", GameLanguage::CanNotDrop);

    GameLanguage::NotFemale = reader->ReadString("Language", "NotFemale", GameLanguage::NotFemale);
    GameLanguage::NotMale = reader->ReadString("Language", "NotMale", GameLanguage::NotMale);
    GameLanguage::NotInGuild = reader->ReadString("Language", "NotInGuild", GameLanguage::NotInGuild);
    GameLanguage::NewMail = reader->ReadString("Language", "NewMail", GameLanguage::NewMail);
    GameLanguage::CouldNotFindPlayer = reader->ReadString("Language", "CouldNotFindPlayer", GameLanguage::CouldNotFindPlayer);
    GameLanguage::NoMentorship = reader->ReadString("Language", "NoMentorship", GameLanguage::NoMentorship);
    GameLanguage::NoBagSpace = reader->ReadString("Language", "NoBagSpace", GameLanguage::NoBagSpace);
    GameLanguage::AllowingMentorRequests = reader->ReadString("Language", "AllowingMentorRequests", GameLanguage::AllowingMentorRequests);
    GameLanguage::BlockingMentorRequests = reader->ReadString("Language", "BlockingMentorRequests", GameLanguage::BlockingMentorRequests);

    delete reader;
}

void GameLanguage::SaveServerLanguage(const std::string &languageIniPath)
{
    File::Delete(languageIniPath);
    InIReader *reader = new InIReader(languageIniPath);
    reader->Write("Language", "Welcome", GameLanguage::Welcome);
    reader->Write("Language", "OnlinePlayers", GameLanguage::OnlinePlayers);
    reader->Write("Language", "LowLevel", GameLanguage::LowLevel);
    reader->Write("Language", "LowGold", GameLanguage::LowGold);
    reader->Write("Language", "LowDC", GameLanguage::LowDC);
    reader->Write("Language", "LowMC", GameLanguage::LowMC);
    reader->Write("Language", "LowSC", GameLanguage::LowSC);

    reader->Write("Language", "LevelUp", GameLanguage::LevelUp);

    reader->Write("Language", "WeaponLuck", GameLanguage::WeaponLuck);
    reader->Write("Language", "WeaponCurse", GameLanguage::WeaponCurse);
    reader->Write("Language", "WeaponNoEffect", GameLanguage::WeaponNoEffect);

    reader->Write("Language", "InventoryIncreased", GameLanguage::InventoryIncreased);
    reader->Write("Language", "ExpandedStorageExpiresOn", GameLanguage::ExpandedStorageExpiresOn);
    reader->Write("Language", "GameName", GameLanguage::GameName);
    reader->Write("Language", "FaceToTrade", GameLanguage::FaceToTrade);
    reader->Write("Language", "NoTownTeleport", GameLanguage::NoTownTeleport);
    reader->Write("Language", "CanNotRandom", GameLanguage::CanNotRandom);
    reader->Write("Language", "CanNotDungeon", GameLanguage::CanNotDungeon);
    reader->Write("Language", "CannotResurrection", GameLanguage::CannotResurrection);
    reader->Write("Language", "CanNotDrop", GameLanguage::CanNotDrop);

    reader->Write("Language", "NotFemale", GameLanguage::NotFemale);
    reader->Write("Language", "NotMale", GameLanguage::NotMale);
    reader->Write("Language", "NotInGuild", GameLanguage::NotInGuild);
    reader->Write("Language", "NewMail", GameLanguage::NewMail);
    reader->Write("Language", "CouldNotFindPlayer", GameLanguage::CouldNotFindPlayer);
    reader->Write("Language", "NoMentorship", GameLanguage::NoMentorship);
    reader->Write("Language", "NoBagSpace", GameLanguage::NoBagSpace);
    reader->Write("Language", "AllowingMentorRequests", GameLanguage::AllowingMentorRequests);
    reader->Write("Language", "BlockingMentorRequests", GameLanguage::BlockingMentorRequests);

    delete reader;
}
